home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / btrees2.arc / BTACSLIB.C next >
Text File  |  1984-12-14  |  3KB  |  144 lines

  1. /*    btsys access library */
  2. #include <stdio.h>
  3. #define INTCHAR 388
  4. #define INTINT  392
  5. #define INTKEY  396
  6.  
  7.     static unsigned       seg, offset;
  8.     static int *word,i;
  9.     static int parm [] = { 0, 0 , 0, 0, 0 };
  10.     static char filnam[] = "              ";
  11.     static char filkey[]   = "                ";
  12.  
  13.         static struct { int cs,ss,ds,es;} segreg,*segregp;
  14.                
  15.     static int fromoff,fromseg,*tooff,toseg;
  16.     extern struct {
  17.             unsigned fcode;
  18.             unsigned keylen;
  19.             unsigned filhand;
  20.             unsigned datapt;
  21.             char    filkey[17];
  22.             char    filnam[15];
  23.               }    btstruct, *structp;
  24.  
  25.     /*    and it begins !!!!!!    */
  26. static int btinit ()
  27. {
  28.     segread(&segreg);
  29.     /*    set up int decimal INTINT */
  30.     seg = 0;
  31.     offset = INTINT;
  32.     word = parm; 
  33.     pokew (offset, seg, word);
  34.                                                
  35.     offset = INTINT + sizeof (int);
  36.     word = segreg.ds;
  37.     pokew (offset, seg, word);
  38.  
  39.     /*    set up int decimal INTCHAR */
  40.     seg = 0;
  41.     offset = INTCHAR;
  42.     word = filnam;
  43.     pokew (offset, seg, word);
  44.     offset = INTCHAR + sizeof (int);
  45.     word = segreg.ds;
  46.     pokew (offset, seg, word);
  47.  
  48.     /*    set up int decimal INTKEY */
  49.     seg = 0;
  50.     offset = INTKEY;
  51.     word = filkey;
  52.     pokew (offset, seg, word);
  53.     offset = INTKEY + sizeof (int);
  54.     word = segreg.ds;
  55.     pokew (offset, seg, word);
  56.  
  57. }    /* end btinit    */
  58.  
  59.     /*    do btsys interrupt    */
  60.  
  61. static int btintr ()
  62. {
  63.     int times;
  64.     struct regval {
  65.         int ax, bx, cx, dx, si, di, ds, es;}
  66.         *xxv, yyv;
  67.     struct {int cs, ss, xds, xes;} *rrv,ssv;
  68.     rrv = &ssv;
  69.  
  70.     segread (rrv);
  71.     yyv.ds = rrv->xds;
  72.     yyv.es = rrv->xes;
  73.     xxv = &yyv;
  74.         sysint (0x60, xxv, xxv);    /* execute the interrupt */
  75. }    /* end btintr     */
  76.  
  77. /*    btfunc            */
  78. /*    performs interface functions between user programs
  79.     and the btree system
  80. */
  81.  
  82. int btfunc (structp)
  83. struct btstruct *structp;
  84.  
  85. {
  86.     switch (structp->fcode)    {
  87.     
  88.     case 0 : btinit ();    /* initialize address for interrupts */
  89.         break;
  90.     case 1:            /* file create */
  91.     case 2:            /* file open */
  92.         parm[0] = structp->fcode;
  93.         parm[1] = structp->keylen;
  94.         parm[2] = NULL;
  95.         parm[3] = NULL;
  96.         parm[4] = NULL;
  97.         strcpy (filnam, structp->filnam);
  98.         strcpy (filkey, "");
  99.         break;
  100.     case 3 :         /* file close */
  101.         parm[0] = structp->fcode;
  102.         parm[1] = NULL;
  103.         parm[2] = structp->filhand;
  104.         parm[3] = NULL;
  105.         parm[4] = NULL;
  106.         strcpy (filnam, "");
  107.         strcpy (filkey, "");
  108.         break;
  109.     case 4 :        /* key insert */
  110.         parm[0] = structp->fcode;
  111.         parm[1] = NULL;
  112.         parm[2] = structp->filhand;
  113.         parm[3] = NULL;
  114.         parm[4] = structp->datapt;
  115.         strcpy (filnam, "");
  116.         strcpy (filkey, structp->filkey);
  117.         break;
  118.     case 5 :        /* random read */
  119.         parm[0] = structp->fcode;
  120.         parm[1] = NULL;
  121.         parm[2] = structp->filhand;
  122.         parm[3] = NULL;
  123.         parm[4] = NULL;
  124.         strcpy (filnam,"");
  125.         strcpy (filkey, structp->filkey);
  126.         break;
  127.  
  128.     default :        /* bad function code */
  129.         return (10);
  130.         break;
  131.     }    /* end switch */
  132.  
  133. /*    now perform the btsys interrupt */
  134.     btintr ();
  135.  
  136. /*    set return values for user program */
  137.     structp->fcode = parm[0];
  138.     structp->filhand = parm[2];
  139.     structp->datapt = parm[4];
  140.     return (parm[3]);
  141.  
  142. }    /* end of btfunc    */
  143.     /*    THE END        */
  144.